﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Media;

namespace Kevin.SLUserControlLibrary
{
    static class ColorHelper
    {
        private static Dictionary<Color, List<Color>> paletteColors;
        public static Dictionary<Color, List<Color>> PaletteColors
        {
            get
            {
                if (paletteColors == null)
                {
                    paletteColors = new Dictionary<Color, List<Color>>();
                    var sb = new StringBuilder();

                    paletteColors.Add(String2Color("FFFFFFFF"), new List<Color>() { String2Color("FFF2F2F2"), String2Color("FFD8D8D8"), String2Color("FFBFBFBF"), String2Color("FFA5A5A5"), String2Color("FF7F7F7F") });
                    paletteColors.Add(String2Color("FF000000"), new List<Color>() { String2Color("FF7F7F7F"), String2Color("FF595959"), String2Color("FF3F3F3F"), String2Color("FF262626"), String2Color("FF0C0C0C") });
                    paletteColors.Add(String2Color("FFEEECE1"), new List<Color>() { String2Color("FFDDD9C3"), String2Color("FFC4BD97"), String2Color("FF938953"), String2Color("FF494429"), String2Color("FF1D1B10") });
                    paletteColors.Add(String2Color("FF1F497D"), new List<Color>() { String2Color("FFC6D9F0"), String2Color("FF8DB3E2"), String2Color("FF548DD4"), String2Color("FF17365D"), String2Color("FF0F243E") });
                    paletteColors.Add(String2Color("FF4F81BD"), new List<Color>() { String2Color("FFDBE5F1"), String2Color("FFB8CCE4"), String2Color("FF95B3D7"), String2Color("FF366092"), String2Color("FF244061") });
                    paletteColors.Add(String2Color("FFC0504D"), new List<Color>() { String2Color("FFF2DCDB"), String2Color("FFE5B9B7"), String2Color("FFD99694"), String2Color("FF953734"), String2Color("FF632423") });
                    paletteColors.Add(String2Color("FF9BBB59"), new List<Color>() { String2Color("FFEBF1DD"), String2Color("FFD7E3BC"), String2Color("FFC3D69B"), String2Color("FF76923C"), String2Color("FF4F6128") });
                    paletteColors.Add(String2Color("FF8064A2"), new List<Color>() { String2Color("FFE5E0EC"), String2Color("FFCCC1D9"), String2Color("FFB2A2C7"), String2Color("FF5F497A"), String2Color("FF3F3151") });
                    paletteColors.Add(String2Color("FF4BACC6"), new List<Color>() { String2Color("FFDBEEF3"), String2Color("FFB7DDE8"), String2Color("FF92CDDC"), String2Color("FF31859B"), String2Color("FF205867") });
                    paletteColors.Add(String2Color("FFF79646"), new List<Color>() { String2Color("FFFDEADA"), String2Color("FFFBD5B5"), String2Color("FFFAC08F"), String2Color("FFE36C09"), String2Color("FF974806") });

                }
                return paletteColors;
            }
        }

        private static List<Color> standardColors;
        public static List<Color> StandardColors
        {
            get
            {
                if (standardColors == null)
                {
                    var colors = new List<Color>();
                    var colorNames = "FFC00000,FFFF0000,FFFFC000,FFFFFF00,FF92D050,FF00B050,FF00B0F0,FF0070C0,FF002060,FF7030A0".Split(',');

                    foreach (var colorName in colorNames)
                    {
                        colors.Add(String2Color(colorName));
                    }
                    if (standardColors == null)
                    {
                        standardColors = colors;
                    }
                }
                return standardColors;
            }
        }

        public static Color String2Color(string color)
        {
            if (color.StartsWith("#"))
            {
                color = color.Replace("#", string.Empty);
            }
            int v = int.Parse(color, System.Globalization.NumberStyles.HexNumber);
            return new Color()
            {
                A = Convert.ToByte((v >> 24) & 255),
                R = Convert.ToByte((v >> 16) & 255),
                G = Convert.ToByte((v >> 8) & 255),
                B = Convert.ToByte((v >> 0) & 255)
            };
        }
    }
}
